//
//  ZZCTextView+Extension.swift
//  weibo
//
//  Created by zhangzuchao on 2017/4/8.
//  Copyright © 2017年 zhangZuChao. All rights reserved.
//

import UIKit
extension ZZCTextView {
    
    //  获取富文本对应的字符串
    var emoticonText: String {
        
        var sendMessage = ""
        //  遍历textView的富文本
        self.attributedText.enumerateAttributes(in: NSMakeRange(0, self.attributedText.length), options: []) { (info, range, _) in
            
            //  info : 富文本的信息
            //  range: 范围的范围
            print(info, NSStringFromRange(range))
            
            if let attachment = info["NSAttachment"] as? ZZCTextAttachment {
                //  有文本附件,表示图片表情
                let emoticon = attachment.emoticon!
                //  获取表情描述
                let chs = emoticon.chs!
                sendMessage += chs
            } else {
                //  文字的富文本
                //  根据范围获取文字的富文本
                let subAttributedStr = self.attributedText.attributedSubstring(from: range)
                //  根据文字富文本获取字符串
                let text = subAttributedStr.string
                sendMessage += text
            }
            
        }
        return sendMessage
    }
    
    //  根据表情模型插入表情富文本
    func insertEmoticon(emoticon: ZZCEmoticon) {
        if emoticon.type == "0" {
            //  图片表情
 
            //  要想插入图片表情,需要完成图片转富文本
            //  记录上一次的富文本
            let lastAttribtedString = NSMutableAttributedString(attributedString: self.attributedText)
            
            let attrbutedStr = NSAttributedString.attributedStringWithEmoticon(emoticon: emoticon, font: self.font!)
            //  拼接富文本  lastAttribtedString.append(attrbutedStr)
            //  获取富文本的选中范围
            var selectedRange = self.selectedRange
            //  替换指定范围的富文本
            lastAttribtedString.replaceCharacters(in: selectedRange, with: attrbutedStr)
            //  设置富文本的字体大小
            lastAttribtedString.addAttributes([NSFontAttributeName: self.font!], range: NSMakeRange(0, lastAttribtedString.length))
            //  4. 设置富文本
            self.attributedText = lastAttribtedString
            //  插入表情选中范围的位置加1
            selectedRange.location += 1
            //  选中范围的长度改成0作为光标使用
            selectedRange.length = 0
            //  设置选中范围,长度改成0
            self.selectedRange = selectedRange
            //  主动调用文字改变的代理方法和文字改变的通知
            self.delegate?.textViewDidChange?(self)
            //  发送文字改变的通知
            NotificationCenter.default.post(name: NSNotification.Name.UITextViewTextDidChange, object: nil)
            
            
        } else {
            //  emoji表情
            let emoji = (emoticon.code! as NSString).emoji()!
            self.insertText(emoji)
        }
    }
    
}
